package com.software.comment.mapper;


import com.software.comment.pojo.Like;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author 周昊
 * @since 2024/12/16 11：34
 * @version 1.0
 */
@Mapper
public interface LikeMapper {

    /**
     * 根据任务id查询点赞信息
     * @param taskId 任务id
     * @return 点赞信息列表
     */
    @Select("select comment_id,count(*) as likeCount from showlike,comment where comment.id = showlike.comment_id " +
            "and task_id = #{taskId} and is_like = 1 group by comment_id ")
    List<Like> selectLikeByCommentId(Integer taskId);

    /**
     * 插入点赞信息
     *
     * @param username  用户名
     * @param commentId 评论id
     * @return  插入成功返回true，否则返回false
     */
    @Insert("INSERT INTO showlike (username, comment_id,is_like) VALUES (#{username}, #{commentId},1)")
    boolean insertLike(String username, Integer commentId);

    /**
     * 根据评论id和用户名查询点赞信息
     * @param commentId 评论id
     * @param username 用户名
     * @return 点赞信息
     */
    @Select("select is_like from showlike where comment_id = #{commentId} and username = #{username} ")
    Integer selectLikeByCommentIdAndUsername(Integer commentId, String username);

    /**
     * 根据评论id和用户名更新点赞信息
     *
     * @param commentId 评论id
     * @param username  用户名
     * @return  更新成功返回true，否则返回false
     */
    @Update("update showlike set is_like = 1 where comment_id = #{commentId} and username = #{username} ")
    boolean updateToLike(Integer commentId, String username);

    /**
     * 根据评论id和用户名更新取消点赞信息
     *
     * @param commentId 评论id
     * @param username  用户名
     * @return  更新成功返回true，否则返回false
     */
    @Update("update showlike set is_like = 0 where comment_id = #{commentId} and username = #{username} ")
    boolean updateToCancelLike(Integer commentId, String username);

    /**
     * 根据评论id统计点赞数量
     * @param commentId 评论id
     * @param username 用户名
     * @return 点赞数量
     */
    @Select("select count(*) from showlike where comment_id = #{commentId} and username = #{username} and is_like = 0")
    Integer countByCommentId(Integer commentId,String username);

    /**
     * 根据评论id和用户名查询点赞信息
     * @param commentId 评论id
     * @param username 用户名
     * @return 点赞信息
     */
    @Select("select is_like from showlike where comment_id = #{commentId} and username = #{username}")
    Integer selectIsLike(Integer commentId, String username);
}